//package com.freesky.web.manager.service.impl;
//
//import com.freesky.common.exception.EMallException;
//import com.freesky.common.pojo.DataTablesResult;
//import com.freesky.common.redis.IRedisTemplate;
//import com.freesky.common.utils.IDUtil;
//import com.freesky.common.utils.reponse.JSONResponse;
//import com.freesky.common.utils.reponse.JSONResponseDiretor;
//import com.freesky.common.vo.VOItem;
//import com.freesky.common.dao.entity.Item;
//import com.freesky.common.dao.entity.ItemCat;
//import com.freesky.common.dao.entity.ItemDesc;
//import com.freesky.web.manager.service.ItemService;
//import com.freesky.web.manager.util.VOUtil;
//import com.baomidou.mybatisplus.mapper.EntityWrapper;
//import com.baomidou.mybatisplus.plugins.Page;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.jms.core.JmsTemplate;
//import org.springframework.stereotype.Service;
//
//import java.util.Date;
//
///**
// * Created by Freesky on 2017/7/29.
// */
//@Service
//public class ItemServiceImpl implements ItemService {
//
//    private final static Logger logger = LoggerFactory.getLogger(ItemServiceImpl.class);
//
//    @Autowired
//    private JmsTemplate jmsTemplate;
//    //    @Resource
////    private Destination topicDestination;
//
//    @Autowired
//    private IRedisTemplate redisTemplate;
//
//    @Value("${redis.key.product.item}")
//    private String redisKeyProductItem;
//
//    @Override
//    public JSONResponse getItemById(Long id) {
//        VOItem voItem = new VOItem();
//
//        Item item = new Item();
//        item.setId(id);
//        item = item.selectById();
//        voItem = VOUtil.changeItemToVOItem(item);
//        ItemCat itemCat = new ItemCat();
//        itemCat.setId(voItem.getCid());
//        itemCat = itemCat.selectById();
//        voItem.setCname(itemCat.getName());
//        ItemDesc itemDesc = new ItemDesc();
//        itemDesc.setItemId(id);
//        itemDesc = itemDesc.selectById();
//        voItem.setDetail(itemDesc.getItemDesc());
//
//        return JSONResponseDiretor.buildSuccessJSONResponse(voItem);
//    }
//
//
//    @Override
//    public DataTablesResult getItemList(int draw, int start, int length, int cid, String vo, String orderCol, String orderDir) {
//
//        DataTablesResult result = new DataTablesResult();
//
//        //分页执行查询返回结果
//        boolean asc = false;
//        if (orderDir.equalsIgnoreCase("asc")) {
//            asc = true;
//        }
//        Page<Item> itemPage = new Page<>();
//        if (cid != -1) {
//            itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().eq("cid", cid).like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().like("id", vo).orderBy(orderCol, asc));
//        } else {
//            itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().like("id", vo).orderBy(orderCol, asc));
//        }
//
//        result.setRecordsFiltered(itemPage.getTotal());
//        result.setRecordsTotal(itemPage.getTotal());
//        result.setDraw(draw);
//        result.setData(itemPage.getRecords());
//
//        return result;
//    }
//
//    @Override
//    public DataTablesResult getItemSearchList(int draw, int start, int length, int cid, String vo,
//                                              String minDate, String maxDate, String orderCol, String orderDir) {
//
//        DataTablesResult result = new DataTablesResult();
//        //分页执行查询返回结果
//        boolean asc = false;
//        if (orderDir.equalsIgnoreCase("asc")) {
//            asc = true;
//        }
//        Page<Item> itemPage = new Page<>();
//        if (minDate != null && minDate.length() > 0 && maxDate != null && maxDate.length() > 0) {
//            if (cid != -1) {
//                itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().between("created", minDate, maxDate).eq("cid", cid).like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().orderBy(orderCol, asc));
//            } else {
//                itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().between("created", minDate, maxDate).like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().orderBy(orderCol, asc));
//            }
//        } else {
//            if (cid != -1) {
//                itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().eq("cid", cid).like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().orderBy(orderCol, asc));
//            } else {
//                itemPage = new Item().selectPage(new Page<>(start / length + 1, length), new EntityWrapper<Item>().like("title", vo).or().like("sell_point", vo).or().like("price", vo).or().orderBy(orderCol, asc));
//            }
//        }
//
//
//        result.setRecordsFiltered(itemPage.getTotal());
//        result.setRecordsTotal(itemPage.getSize());
//        result.setDraw(draw);
//        result.setData(itemPage.getRecords());
//        return result;
//    }
//
//    @Override
//    public DataTablesResult getAllItemCount() {
//        int count = new Item().selectCount(new EntityWrapper());
//        DataTablesResult result = new DataTablesResult();
//        result.setRecordsTotal(Math.toIntExact(count));
//        return result;
//    }
//
//
//    public Item getPOItemById(Long id) {
//        Item item = new Item();
//        item.setId(id);
//        item = item.selectById();
//        return item;
//    }
//
//    @Override
//    public Item alertItemState(Long id, Integer state) {
//
//        Item item = getPOItemById(id);
//        item.setStatus(state.byteValue());
//        item.setUpdated(new Date());
//        boolean update = item.updateById();
//
//        if (!update) {
//            throw new EMallException("修改商品状态失败");
//        }
//        return item;
//    }
//
//    @Override
//    public int deleteItem(Long id) {
//
//        Item item = new Item();
//        item.setId(id);
//        boolean delete = item.deleteById();
//        if (!delete) {
//            throw new EMallException("删除商品失败");
//        }
//        ItemDesc itemDesc = new ItemDesc();
//        itemDesc.setItemId(id);
//        boolean deleteItemDesc = itemDesc.deleteById();
//        if (!deleteItemDesc) {
//            throw new EMallException("删除商品详情失败");
//        }
//        //发送消息同步索引库
//        try {
//            sendRefreshSolrMessage("delete", id);
//        } catch (Exception e) {
//            logger.error("同步索引出错");
//        }
//        return 0;
//    }
//
//    @Override
//    public Item addItem(VOItem voItem) {
//        long id = IDUtil.getRandomId();
//        Item item = VOUtil.changeVOItemToItem(voItem);
//        item.setId(id);
//        item.setStatus((byte) 1);
//        item.setCreated(new Date());
//        item.setUpdated(new Date());
//        if (item.getImage().isEmpty()) {
//            item.setImage("http://ow2h3ee9w.bkt.clouddn.com/nopic.jpg");
//        }
//        boolean insertItem = item.insert();
//        if (!insertItem) {
//            throw new EMallException("添加商品失败");
//        }
//
//        ItemDesc itemDesc = new ItemDesc();
//        itemDesc.setItemId(id);
//        itemDesc.setItemDesc(voItem.getDetail());
//        itemDesc.setCreated(new Date());
//        itemDesc.setUpdated(new Date());
//        boolean insertItemDesc = itemDesc.insert();
//        if (!insertItemDesc) {
//            throw new EMallException("添加商品详情失败");
//        }
//        //发送消息同步索引库
//        try {
//            sendRefreshSolrMessage("add", id);
//        } catch (Exception e) {
//            logger.error("同步索引出错");
//        }
//        return getPOItemById(id);
//    }
//
//    @Override
//    public Item updateItem(Long id, VOItem voItem) {
//
//        Item oldItem = getPOItemById(id);
//
//        Item item = VOUtil.changeVOItemToItem(voItem);
//
//        if (item.getImage().isEmpty()) {
//            item.setImage(oldItem.getImage());
//        }
//        item.setId(id);
//        item.setStatus(oldItem.getStatus());
//        item.setCreated(oldItem.getCreated());
//        item.setUpdated(new Date());
//        boolean updateItem = item.updateById();
//        if (!updateItem) {
//            throw new EMallException("更新商品失败");
//        }
//
//        ItemDesc itemDesc = new ItemDesc();
//
//        itemDesc.setItemId(id);
//        itemDesc.setItemDesc(voItem.getDetail());
//        itemDesc.setUpdated(new Date());
//        itemDesc.setCreated(oldItem.getCreated());
//        boolean updateItemDesc = itemDesc.updateById();
//        if (!updateItemDesc) {
//            throw new EMallException("更新商品详情失败");
//        }
//        //同步缓存
//        deleteProductDetRedis(id);
//        //发送消息同步索引库
//        try {
//            sendRefreshSolrMessage("add", id);
//        } catch (Exception e) {
//            logger.error("同步索引出错");
//        }
//        return getPOItemById(id);
//    }
//
//    /**
//     * 同步商品详情缓存
//     *
//     * @param id
//     */
//    public void deleteProductDetRedis(Long id) {
//        try {
//            redisTemplate.delete(redisKeyProductItem + ":" + id);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 发送消息同步索引库
//     *
//     * @param type
//     * @param id
//     */
//    public void sendRefreshSolrMessage(String type, Long id) {
////        jmsTemplate.send(topicDestination, new MessageCreator() {
////            @Override
////            public Message createMessage(Session session) throws JMSException {
////                TextMessage textMessage = session.createTextMessage(type+","+String.valueOf(id));
////                return textMessage;
////            }
////        });
//    }
//}
